package modelo.delictivas;

import java.util.ArrayList;
import java.util.List;

import modelo.geografia.Capital;
import org.w3c.dom.Document;
import org.w3c.dom.Element;


public class Robo {

	private TesoroNacional tesoroRobado;
	private List<Capital> rutaDeEscape;
	private Ladron ladron;
	private Capital lugarDelRobo;

	public Robo(TesoroNacional tesoro, Ladron ladron) throws Exception {
		this.tesoroRobado = tesoro;
		this.ladron = ladron;
		this.lugarDelRobo = ladron.getCapitalActual();
		this.rutaDeEscape = ladron.generarRutaDeEscapeAlRobarTesoro(tesoro);
	}
	
	private Robo(){
		
		this.rutaDeEscape = new ArrayList<Capital>();
		
	}

	public TesoroNacional getTesoroRobado() {
		
		return this.tesoroRobado;

	}

	public boolean sospechosoEsCulpable(Ladron ladron) {
		return (this.ladron.getNombre().equals(ladron.getNombre()) );
	}
	public int getCantidadDeCapitalesEnRutaEscape(){
		return this.rutaDeEscape.size();
	}
	public Capital getLugarDelRobo(){
		return this.lugarDelRobo;
	}
	
	
	
	public Element serializar(Document doc) {
			
		Element elementoRobo = doc.createElement("Robo");
		
		Element elementoTesoroRobado = doc.createElement("TesoroRobado");
		elementoTesoroRobado.appendChild( this.tesoroRobado.serializar(doc) );
		elementoRobo.appendChild(elementoTesoroRobado);
		
		Element elementoLadron = doc.createElement("Ladron");
		elementoLadron.appendChild( this.ladron.serializar(doc) );
		elementoRobo.appendChild(elementoLadron);
		
		Element elementoRutaDeEscape = doc.createElement("RutaDeEscape");
		elementoRobo.appendChild(elementoRutaDeEscape);
		for (Capital capital : this.rutaDeEscape) {
			elementoRutaDeEscape.appendChild(capital.serializar(doc));
		}
		
		return elementoRobo;
	}
	
	public static Robo hidratar(Element elementoRobo) throws Exception {
		
		Robo nuevoRobo = new Robo();
		
		Element elementoTesoroRobado = (Element) elementoRobo.getElementsByTagName("TesoroRobado").item(0).getFirstChild();
		nuevoRobo.tesoroRobado = TesoroNacional.hidratar(elementoTesoroRobado);
		nuevoRobo.lugarDelRobo = nuevoRobo.tesoroRobado.getCapitalDeOrigen();
		
		Element elementoLadron = (Element)elementoRobo.getElementsByTagName("Ladron").item(0).getFirstChild();
		nuevoRobo.ladron = Ladron.hidratar(elementoLadron);
		
		Element elementoRutaDeEscape = (Element)elementoRobo.getElementsByTagName("RutaDeEscape").item(0);
		
		for(int i=0; i< elementoRutaDeEscape.getChildNodes().getLength(); i++) {
			Capital capital = Capital.hidratar((Element)elementoRutaDeEscape.getChildNodes().item(i));
			nuevoRobo.agregarCapitalAEscape(capital);
		}
		
		return nuevoRobo;
	}

	private void agregarCapitalAEscape(Capital capital) {
		this.rutaDeEscape.add(capital);
	}

	public String getDatoInicial() {
		return this.ladron.getSexo().getDescripcion();
	}


}
